import { inject, injectable, multiInject, named } from "inversify";
import { Terminal, Uri } from "vscode";
import { EQEnvironment } from "../../eqEnvironments/info";
import { IInterpreterService } from "../../interpreter/contracts";
import { IServiceContainer } from "../../ioc/types";
import { ITerminalManager } from "../application/types";
import { IPlatformService } from "../platform/types";
import { IConfigurationService, Resource } from "../types";
import { ShellDetector } from "./shellDetector";
import { IShellDetector, ITerminalActivationCommandProvider, ITerminalHelper, TerminalActivationProviders, TerminalShellType } from "./types";

@injectable()
export class TerminalHelper implements ITerminalHelper {
    private readonly shellDetector: ShellDetector;
    constructor(
      @inject(IPlatformService) private readonly platform: IPlatformService,
      @inject(ITerminalManager) private readonly terminalManager: ITerminalManager,
      @inject(IServiceContainer) private readonly serviceContainer: IServiceContainer,
      @inject(IInterpreterService) readonly interpreterService: IInterpreterService,
      @inject(IConfigurationService) private readonly configurationService: IConfigurationService,
      @inject(ITerminalActivationCommandProvider)
      @named(TerminalActivationProviders.conda)
      private readonly conda: ITerminalActivationCommandProvider,
      @inject(ITerminalActivationCommandProvider)
      @named(TerminalActivationProviders.bashCShellFish)
      private readonly bashCShellFish: ITerminalActivationCommandProvider,
      // @inject(ITerminalActivationCommandProvider)
      // @named(TerminalActivationProviders.commandPromptAndPowerShell)
      // private readonly commandPromptAndPowerShell: ITerminalActivationCommandProvider,
      // @inject(ITerminalActivationCommandProvider)
      // @named(TerminalActivationProviders.pyenv)
      // private readonly pyenv: ITerminalActivationCommandProvider,
      // @inject(ITerminalActivationCommandProvider)
      // @named(TerminalActivationProviders.pipenv)
      // private readonly pipenv: ITerminalActivationCommandProvider,
      @multiInject(IShellDetector) shellDetectors: IShellDetector[],
  ) {
      this.shellDetector = new ShellDetector(this.platform, shellDetectors);
  }
  getEnvironmentActivationCommands(terminalShellType: TerminalShellType, resource?: Uri, interpreter?: EQEnvironment): Promise<string[] | undefined> {
    throw new Error("92Method not implemented.");
  }
  identifyTerminalShell(terminal?: Terminal): TerminalShellType {
    throw new Error("90Method not implemented.");
  }
  getEnvironmentActivationShellCommands(resource: Resource, shell: TerminalShellType, interpreter?: EQEnvironment): Promise<string[] | undefined> {
    throw new Error("91Method not implemented.");
  }
}